NuttX-7.7
---------

The 107th release of NuttX, Version 7.7, was made on January 26, 2015,
and is available for download from the SourceForge website. Note
that release consists of two tarballs: nuttx-7.7.tar.gz and
apps-7.7.tar.gz. Both may be needed (see the top-level nuttx/README.txt
file for build information).

Additional new features and extended functionality:

* Core OS:

- Task exit handling: Add logic to clean up after task_delete() or
pthread_cancel() if the task happens to be waiting on a semaphore
when was is cancelled.
- Stack coloration: Removed CONFIG_DEBUG_STACK and replaced it with
CONFIG_STACK_COLORATION that does the same thing but without enabling
debug. From David Sidrane.

* Common Drivers:

- Discrete joystick driver: Added an interface definition and upper
half driver for a discrete joystick device (where X/Y changes are
indicated with button presses).
- Analog joystick driver: Added an interface definition and upper
half driver for a analog joystick device (where X/Y positions are
sampled, numeric values).
- Add driver support for the ADXL345 accelerometer. From Alan
Carvalho de Assis
- Generic serial driver: Add watermark levels to the serial RX flow
control logic. Modify the rxflowcontrol method to accept the number
of bytes in the buffer and a boolean indication of which watermark
was crossed.

* File Systems/Block Drivers/MTD:

- Add procfs write support. From Ken Petit.
- Implemented wear-leveling in the SmartFS. From Ken Pettit.
- MMC/SD Interface: MMCSD SDIO: Add support for a new
SDWAIT_WRCOMPLETE condition. The previous logic used a busy-wait
loop to poll the card R1 status to determine when the card was
ready for the next transfer. That busy-wait can be quite long --
up to hundreds of milliseconds. An alternative is to look the SD D0
pin which will change state when the card is no longer busy. This
change avoids the busy-wait poll by reconfiguring the SD D0 pin as a
GPIO interrupt, then waiting for the card to become ready without
taking up CPU cycles. From David Sidrane.

* Drivers:

- Add support for a generic EEPROM driver that accesses EEPROM as a
character driver (vs. an MTD driver). From Sébastien Lorquet.

* Graphics Support:

- Many new fonts converted for use with NuttX and added by
Pierre-noel Bouteville

* Networking:

- IPv4 support is now conditioned on CONFIG_NET_IPv4.
- Implemented and verified IPv6 support conditioned on
CONFIG_NET_IPv6. Either IPv4 or IPv4 or both may be selected.
Sockets, of course, must be bound to one or the other. Added support
for IPv6 ioctls to manipulate IP addresses.
- Integrated support for ICMPv6 and the ICMPv6 Neighbor Discovery
Protocol and ICMPv6 ECHO request/reply needed to support ping logic.
- All Ethernet drivers: Modified to support. Most, however, are
still missing address filtering logic required for ICMPv6 Neighbor
Discovery Protocol. See
https://cwiki.apache.org/confluence/display/NUTTX/IPv6
- Also added missing raw/packet socket support to all Ethernet drivers.

* Host Simulation:

- Add a configuration build and test the Traveler first person game
using the simulator.
- Add an X11 mouse-based simulation of an analog joystick device

* Atmel SAMA5D Boards:

- Add analog Joystick shield support for the SAMA5D3 Xplained board.

* Freescale KL Drivers:

- Add GPIO interrupt capability for the KL architecture. From Alan
Carvalho de Assis

* Freescale KL Boards:

- Freedom-KL25Z: Add board support for the ADXL345 accelerometer. From
Alan Carvalho de Assis
- Freedom-KL25Z: Update the Freedom KL25Z board CC3000 support to use
the current CC300 interfaces. From Alan Carvalho de Assis

* NXP LPC43xx Boards:

- A port of NuttX to the LPC4357-EVB from Toby Duckworth. This port
is a leverage of the LPC3330-Xplorer port and still have a some
misinformation from that port that needs to be updated for the
LPC4357-EVB.

* SiLabs EFM32 Drivers:

- Serial: Add support for serial termios TCGET and TCSET. For the
moment, only set/get speed is implemented. From Pierre-noel
Bouteville.
- RMU: Add support for the EFM32 reset management unit (RMU). From
Pierre-noel Bouteville.

* SiLabs EFM32 Boards:

- Add support for timer/PWM on the EFM32GG. From Pierre-noel
Bouteville

* STMicro STM32:

- Enable support for the STM32 F102. From the PX4 team.

* STMicro STM32 Drivers:

- STM32 F429 LTDC: Add interface to perform hardware accelerated layer
operation. Provides access to a reference of a specific ltdc layer.
From Marco Krahl
- STM32 F429 LTDC support: Implemented LTDC framebuffer support for the
generic nuttx framebuffer interface. Also implements the interface to
perform hardware accelerated layer operation by the ltdc controller
and dma2d controller later. From Marco Krahl.
- STM32: Add support for the internal low speed clock (LSI) as a
source of the RTC clock. Some boards do not have the external
32kKhz oscillator installed, for those boards we must fallback to
the crummy internal RC clock. From Kevin Hester
- STM32 SDIO: Add support for the new SDWAIT_WRCOMPLETE condition.
From David Sidrane

* STMicro STM32 Boards:

- Add a discrete Joystick support for the STM3210E-EVAL.
- Add analog Joystick shield support for the Nucleo F4x1RE boards.
- STM32 F429i-Disco: Add support for initializing of the ltdc
controller and the lcd device connected on the stm32f429i-disco.
From Marco Krahl.
- Removed the px4-v2_upstream configuration. This was not the
official configuration for the PX4 board and has led to confusion
by NuttX users. The board configuration also requires some ongoing
maintenance and customization to support ongoing PX4 testing and
evaluation. It is best retained the PX4 repositories where it can
be properly maintained and not in the upstream NuttX repository.

* TI Tiva:

- Add support for the TI Tiva TM4C 129X family. Some unverified
support for the TM4C 1294 is also in place.

* TI Tiva Drivers:

- Added support for Tiva I2C driver. Verified on the Tiva TM4C123G
and TM4C129X.
- Added a Tiva TM4C129X Ethernet driver.
- Add a timer library for generic support of Tiva timers
- Add a driver lower half for drivers/timer.c. Only 32-bit periodic
timers are supported. This provides userspace access to timers.

* TI Tiva Boards:

- TM4C123G Launchpad: Add initialization logic for an external AT24
EEPROM. This is intended only to support testing of the Tiva I2C
driver.
- Board support for the Tiva DK-TM4C129x Connected Development Kit.
- DK-TMC129X: Add an IPv6-enabled NSH configuration.

* C Library/Header Files:

- Added support for a variadic ioctl() function. The ioctl()
interface is a non-standard, Unix interface. NuttX has always used
the older, three-parameter version. Most contemporary systems now,
however, use a variadic form of the ioctl() function. Added an
option to insert a shim layer to adapt the three-parameter ioctl()
to use the variadic interface form. Internally, the ioctl handling
is the same three-parameter logic. The only real complexity to the
shim is in how the system calls must be handled.
- Added sys/custom_file.h. Used when CUSTOM_FILE_IO is define and
avoids re-definition errors about the FILE define. From Thomas
Gruber via the PX4 repository
- Add CRC8 support to the C library. From Ken Pettit.
- math.h: Added support for the expm1 functions. From Brennan Ashton

* Applications:

- apps/examples/djoystick: Add a test of the discrete joystick
driver.
- apps/examples/ajoystick: Add a test of the analog joystick
driver.
- apps/examples/ltdc: Add ltdc test example. From Marco Krahl
- apps/system/lm75: Add a tiny application to read the temperature
from an LM-75 (or compatible) temperature sensor
- apps/examples/timer: Add a trivial test of the timer driver

- apps/system/cu: Add a minimalist implementation of the 'cu'
terminal program (part of Taylor UUCP for ages). Using it, you can
simply open a serial port and interact with it. Using '~.' you can
leave the terminal program and drop back to nsh. This might come
in handy for people that have e.g. GSM modems, GPS receivers or
other devices with text based serial communications attached to
their NuttX systems. From Harald Welte
- apps/interpreters/micropython: A port of Micro Python to NuttX.
Contributed by Dave Marples

- apps/netutils/dnsclient: Can select to be either IPv4 or IPv6, but
not both (IPv6 still does not compile)
- apps/netutils/netlib: Add new library functions to manipulate IPv6
addresses.
- apps/examples/nettest: Update test so that it can be used to test
IPv6 TCP sockets
- apps/examples/udp: The UDP test example has been extend to support
IPv6 domain sockets

- apps/nshlib: Add logic to initialize IPv6 addresses
- apps/nshlib: Add the ping6 command to support checking IPv6 networks.
- apps/nshlib: Clean up network status presentation for IPv6

Efforts In Progress. The following are features that are partially
implemented but present in this release. They are not likely to be
completed soon.

* IPv6. While basic IPv6 support was completed in NuttX-7.7,
there are lingering issues with getting IPv6 compatibility
with applications and network utilities.

* Processes. Much of the work in this release is focused on the
realization of Unix-style user processes in NuttX. There is more to
be done, however. The full roadmap and status is available at:
https://cwiki.apache.org/confluence/display/NUTTX/Memory+Configurations

* XMega: There are some fragments in place for an XMega port. That
port has not really started, however.

* Galileo: Similarly, there are fragments in place for an Intel Galileo
port. The port probably will not happen (I gave my Galileo board away!).

Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):

* Core OS:

- POSIX message queues: msg type should be char * not void * in
mq_send, mq_timedsend, mq_receive, and mq_timedreceive. Noted by
Pierre-Noel Bouteville
- POSIX message queues: In message queue creation return ENOSPC error
if size exceeds the configured size of pre-allocated messages; Use
ENOSPC vs ENOMEM per OpenGroup.org. From Pierre-Noel Bouteville.
- Task Names: strncpy() will not copy the terminating \0 into the
destination if the source is larger than the size of the
destination. Ensure that the last byte is always zero and let
strncpy() only copy CONFIG_TASK_NAME_SIZE bytes. The issue of
unterminated names can be observed in ps when creating a pthread
while CONFIG_TASK_NAME_SIZE is set to 8. From Daniel Willmann

* Memory Management:

- Granule allocator: Fixes some issues found by the PX4 team using
Coverity. From Pavel Krienko

* Networking:

- Several fixes correcting issues with the CC3000 networking. From
Jussi Kivilinna
- CC3000 Fix: Data can be unaligned. When dereferenced as an input
ntosh(), a bad value is returned. Reported by Alan Carvalho de
Assis
- Correct naming of fields in struct sockaddr_in6: sin6_port and
sin6_family, not sin_port and sin_family.
- accept(): Correct the value returned by accept() in the case where
net_lockingwait() is called. It was returning -1 and losing the
errno value. Noted by Rony Xln

* Common Drivers:

- Loop device should return -EINTR is interrupted by a signal.
- M25P serial flash driver: Add subsector size of the M24P16 part.
From Lazlo
- Common serial driver: In case a thread is doing a blocking operation
(e.g. read()) on a serial device, while it is being terminated by
pthread_cancel(), then uart_close() gets called, but the semaphore
is still blocked. This means that once the serial device is opened
next time, data will arrive on the serial port (and driver
interrupts handled as normal), but the received characters never
arrive in the reader thread. The problem was fixed by re-
initializing the semaphores on the last uart_close() on the device.
From Harald Welte
- Pipes: Fixes some issues found by the PX4 team using Coverity. From
Pavel Krienko
- CDC/ACM driver: Fixes some issues found by the PX4 team using
Coverity. From Pavel Krienko

* NXP LPC43xx Drivers:

- LPC4357: Changes required to get USART 2 & 3 working on the
lpc4357-evb. From Toby Duckworth.

* STMicro STM32:

- Several fixes correcting issues with the STM32 header files from
Jussi Kivilinna

* STMicro STM32 Drivers:

- Ported Tridge's STM32 I2C noise resilience logic from the PX4
repository.
- STM32 F2 and F4: Set the GPIO_SPEED_50MHz on all F2 and F4 SPI pin
configurations. This is based on an F411 SPI1 errata but the fixed
is generalized to all SPI and all F2 and F4. Discovered and fixed
by Sebastien Lorquet.
- Fix for STM32 OTGHS device driver working in FS mode. From Ken
Pettit.
- For STM32 OTG HS DEV (in FS mode): Disable ULPI clock enable in RCC
AHB1 Register. If Both ULPI and the FS clock enable bits are set in
FS mode, then the ARM never awakens from WFI due to a chip issue.
This is only an issue if you are using the internal PHY. From Ken
Pettit.
- STM32 F429 LTDC: Add missing clut register definition. From Marco
Krahl
- STM32 serial: fix declaration and definition of up_receive() and
up_dma_receive() to match fields in the interface definition of
struct uart_ops_s. From Freddie Chopin.

* TI Tiva Drivers:

- Fix Tiva IRQ control logic; was limited to only 64 IRQs. That is a
problem for higher numbered IRQs on many platforms

* C Library/Header Files:

- avsprintf(): Fix a bug in usage of va_list on x86. On x86,
va_list is a pointer to a single copy on the stack. avsprintf()
calls lib_vsprintf() twice and so traverses the va_list twice using
va_start. va_start modifies that single copy on the stack so that
the second call to lib_vsprintf() fails. This appears to be an
issue with x86 only so far.
- stdint.h: Don't use hex values to specify minimum values of fixed
width, signed values. Hex values are inherently unsigned and not
usable for this purpose in all contexts.
- strncpy(): Would trash a lot of memory if n == 0. From Yasuhiro
Osaki.
- sscanf(). Accept %X and %F as well as %x %f as a format specifiers.
From Sébastien Lorquet

* Applications:

- apps/examples/romfs: fix romfs example builtin app registry issue.
From Librae
- apps/system/cdcacm, composite and usbmsc: Fix some strangely placed
conditional compilation. Looks like an automated update went awry
- apps/netutils/telnetd: Add protection when CONFIG_SCHED_HAVE_PARENT
is enabled: Call sigaction with SA_NOCLDWAIT so that exit status is
not retained (no zombies) and block receipt of SIGCHLD so that
accept is not awakened by a signal. If accept() is awakened by a
signal, do not do anything crazy like exit. Most from Rony Xln
- apps/nshlib/: NSH TFTP get command: Wrong file name used for the
destination. From Lazlo
